/* Filename: 100days.c
 * Description: 时间戳与时间结构体相互转换，以及往后推100天的计算方法
 * Last modified: humble 20200316 21:56
 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define BUFSIZE (1024)
static void usage(void);

int main(int argc, char **argv) {
    time_t stamp = 0;
    struct tm *tmptr = NULL;
    char buf[BUFSIZE] = {0};
    if(argc != 1){ fprintf(stderr, "argc !=1"); usage(); exit(1); }

    stamp = time(NULL);
    if(stamp == (time_t)-1){ perror("time"); exit(1); } // 判断stamp非法

    tmptr = localtime(&stamp); // 时间戳转结构体
    if(!tmptr){ perror("localtime"); exit(1); }

    strftime(buf, BUFSIZE, "NOW:%Y-%m-%d", tmptr); // 把时间结构体格式化成字符串保存到buf
    printf("%s\n", buf);

    tmptr->tm_mday += 100; // 用运算的方式往后推100天
    if((time_t)-1 == mktime(tmptr)){ perror("mktime"); exit(1); } // mktime(tmptr)把时间结构体(struct tm)转成时间戳(time_t)

    strftime(buf, BUFSIZE, "LATER:%Y-%m-%d", tmptr); // 直接格式化100天之后的日期保存到buf
    printf("%s\n", buf);
    return 0;
}

static void usage(void) {
#define USAGE "Usage:\n\
  Helloworld\n"
    printf(USAGE);
}
